23

» WarCraft 3 / Приказ юниту

Похожие вопросы:

ответ
И вновь поможет старая наработка...
ответ
не именно пехотинец а вообще любой герой который применяет этот приказ.
это так сказать модификатор атаки будет. мне нужен скил который включается и отключается.
Я уже использовал скилы - Жар преиспобней и Щита маны.
У одного героя может быть 3 модификатора атаки сразу
ответ
Приказать ему использовать способность, на основе которой ты делал свою.
Потому что:
При конвертации в JASS данный вариант просто вызовет нативную функцию по отдаче приказа по строке приказа(в русском РО почему-то переведено как "порядок строк"), указанной в скилле(spiritwolf для вызова волка говорящего с духами, например). Этот приказ, кстати, можно менять только для канала(и, быть может, еще чего-то, хотя едва ли). В остальных случаях ничего не изменится, поскольку эта строка вшита в движок. (хотя там, скорее всего, вшит айдишник, НУДАНИВАЖНА).
ответ
Steal nerves:
код
local rect R = //твоя область
local real x = GetRandomReal(GetRectMinX(R), GetRectMaxX(R))
local real y = GetRandomReal(GetRectMinY(R), GetRectMaxY(R))
и посылаем к этим случайным координатам
ответ
Разумеется нет, приказы строго синхронизируются.
Да и как вы себе это представляете? У игрока А работник пошёл рубить лес, а у игрока Б этот же самый работник пошел добывать золото? Что за бред?

23

» Администрация XGM / Смена никнейма

Похожие вопросы:

ответ
EVIL GaMeR:
Простите нашел аналогичный вопрос xgm.ru/p/xgm/59088
ответ
Для начала заглянуть в справку. xgm.guru/help/nickname
На какой тебе поменять?
ответ
Roy Mustang:
Чтобы сменить ник нейм нужен 1 свободный поинт, который ты потратишь на эту функцию (поинты дают за каждый лвл)

23

» WarCraft 3 / Импорт деревев

Похожие вопросы:

ответ
Минуту спустя
Нашел: Кликай
ответ
У тебя ошибка в путях!
ответ
Настраиваешь в РО дерево так чтобы у него была 1 вариация и там текстуру нужно к дереву прописать если она импортирована внимательно изучи все строки связанные с деревом как разрушенный объект.
ответ
Вариации работают так: в адресе файла модели декорации указывается типа [MyModel].mdx, но этого файла на самом деле нет, а есть только файлы вариации типа [MyModel]0.mdx, [MyModel]1.mdx, [MyModel]2.mdx и т. п.
ответ
юзаю те же самые модели только собственного изменения, и все работает

23

» WarCraft 3 / Дамми не кастует спелл

Похожие вопросы:

ответ
Проблему решил сравнением переменных кастера и цели, если совпадают - задаю поиск в радиусе не от цели, а от кастера.
ответ
Только дебаффы ядовитых стрел могут стакатся, но даммик обязан иметь дальнюю атаку (при условии что у разных абилок ядовитых стрел будут разные баффы в настройках).
Так же можно юзать таймер и ауру торнадо как написали выше, ну если уж совсем нужен сложный бафф как дефолтный - то тут триггер и немного гемора с мемхаком, зато полный комплект параметров (мигает иконка в статусе перед завершением время действия, бафф спадает с цели после диспела, смерти (у цели крест перерождения или аналог), складывается или не складывается в зависимости от кода).
Пример не рекомендуемый к повторению
function FormatAirportTrainingBar takes integer fp_n returns string
    local string str = ""

    if ( fp_n <= 0 ) then
        return str
    endif

    loop
        exitwhen fp_n < 10
        if ( udg__TempBarStyle == 0 ) then
            set str = str + "''''''''''"
        else
            set str = str + "||||||||||||||||||||"
        endif
        set fp_n = fp_n - 10
    endloop

    loop
        exitwhen fp_n <= 0
        if ( udg__TempBarStyle == 0 ) then
            set str = str + "'"
        else
            set str = str + "||"
        endif
        set fp_n = fp_n - 1
    endloop

    return str
endfunction

function UpdateAirportTrainingBar takes texttag tt, integer fp_nTick, integer fp_nTickMax returns nothing
    local integer nProgress
    local integer nLen
    local string strTT1
    local string strTT2

    if ( tt == null ) then
        call BJDebugMsg( "text tag hDZzRwuZxFQcXqaMPnML null" )
        return
    endif

    set nLen = R2I( I2R( fp_nTickMax ) / 300 * 100 )
    set nProgress = R2I( I2R( nLen ) / fp_nTickMax * fp_nTick )
    set strTT1 = "" + FormatAirportTrainingBar( nProgress )
    set strTT2 = FormatAirportTrainingBar( nLen - nProgress ) + ""
    call SetTextTagText( tt, "|cff0080c0" + strTT1 + "|r|cffff0000" + strTT2 + "|r", 0.023 )
endfunction

function Get_Staff_of_Purification takes unit runner returns item
    set bj_forLoopAIndex = 0
    set bj_lastCreatedItem = null
    
    if GetUnitAbilityLevel( runner, 'Arun' ) == 0 then
        return null
    endif
    
    loop
        exitwhen bj_forLoopAIndex > 5

        set bj_lastCreatedItem = UnitItemInSlot( runner, bj_forLoopAIndex )
        if GetItemTypeId( bj_lastCreatedItem ) == 'I01A' then
            return bj_lastCreatedItem
        endif

        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop

    return bj_lastCreatedItem
endfunction

function Trig_RunnerDamageDetect_Conditions takes nothing returns boolean
    if GetTriggerEventId( ) == EVENT_UNIT_DAMAGED then
        return GetEventDamage( ) > 0.00 and GetEventDamageSource( ) != GetTriggerUnit( ) and GetEventDamageSource( ) != DummyAttacker
    endif
    return true
endfunction

function HealRunner takes nothing returns nothing
    local DamageData dd = GetDataBX( GetExpiredTimer( ) )
    
    call UnitRemoveAbility( dd.attacked, 'AMhp' )
    call SetUnitState( dd.attacked, UNIT_STATE_LIFE, dd.hp )
    
    call RemoveDataBX( dd.trix )
    call DestroyTimer( dd.trix )
    call dd.clear( )
    call dd.destroy( )
endfunction

function Trig_RunnerDamageLock_Actions takes nothing returns nothing
    local TriggerData st = GetDataBX( GetTriggeringTrigger( ) )
    local DamageData dd
    local eventid id = GetTriggerEventId( )
    
    if id == EVENT_GAME_TIMER_EXPIRED and st.id < st.time and st.attacked != null then
        set st.id = st.id + 1
        if GetUnitAbilityLevel( st.attacked, 'Bcyc' ) > 0  or GetUnitAbilityLevel( st.attacked, 'Bcy2' ) > 0 then
            call SetTextTagPos( st.tt, GetUnitX( st.attacked ) - 60.00, GetUnitY( st.attacked ) - 60.00, 585.00 )
        else
            call SetTextTagPos( st.tt, GetUnitX( st.attacked ) - 60.00, GetUnitY( st.attacked ) - 60.00, 80.00 + GetUnitFlyHeight( st.attacked ) )
        endif
        call UpdateAirportTrainingBar( st.tt, 100 - R2I( st.dmg / st.hp * 100.00 ), 100 )
        
    elseif id == EVENT_UNIT_DAMAGED and st.dmg < st.hp then
        set dd = DamageData.create( )
        set dd.trix = CreateTimer( )
        set dd.attacked = st.attacked
        set dd.dmg = GetEventDamage( )
        set dd.hp = GetUnitState( dd.attacked, UNIT_STATE_LIFE )
        
        call SetDataBX( dd.trix, dd )
        call UnitAddAbility( dd.attacked, 'AMhp' )
        call SetUnitState( dd.attacked, UNIT_STATE_LIFE, dd.hp + dd.dmg )
        
        call TimerStart( dd.trix, 0.00, false, function HealRunner )
        
        set st.dmg = st.dmg + dd.dmg
    else
        call UnitRemoveAbility( st.attacked, 'A08L' )
        call UnitMakeAbilityPermanent( st.attacked, false, 'A08L' )
        call DisableTrigger( st.trg )
        call SetTextTagVisibility( st.tt, false )
        
        if not IsUnitDead( st.attacked ) then
            call UnitRemoveAbility( st.attacked, 'B00A' )
        endif
        
        call RemoveSavedInteger( gg_htb_HashData, ExKeySoPRunner, GetHandleId( st.attacked ) )
        
        call st.RemoveTrigger( )
        call st.destroy( )
    endif
    
    set id = null
endfunction

function Trig_Staff_of_Purification_Actions takes nothing returns nothing
    local TriggerData dd
    local unit Runner = GetSpellAbilityUnit( )
    local integer RunnerId = GetHandleId( Runner )
    local item Staff = LoadItemHandle( gg_htb_HashData, RunnerId, ExKeySoP )
    local integer ChargesCount = 0
    local trigger trig = LoadTriggerHandle ( gg_htb_HashData, ExAtomShield, RunnerId )
    local integer pBuff
    
    if Staff == null then
        set Staff = Get_Staff_of_Purification( Runner )
         
        if Staff == null then
            //call DisplayTextToPlayer( Player( CrashPlayerNumber ), 0.00, 0.00, I2Sx( 'A01Q', CrashPlayerNumber ) )
            call BJDebugMsg( DEBUG + I2Sx( 'A02O', 0 ) + INFO )
            return
        endif
        
        call SaveBoolean( gg_htb_HashData, RunnerId, ExKeyHasStaff, true )
        call SaveItemHandle( gg_htb_HashData, RunnerId, ExKeySoP, Staff )
    endif
    
    set ChargesCount = GetItemCharges( Staff )
    
    if ChargesCount < 1 then
        set Runner = null
        set Staff = null
        set trig = null
        return
    endif
    
    call SetItemCharges( Staff, 0 )
    
    if trig != null then // блокирующие урон способности не складываются.
        call TriggerExecute( trig )
        set trig = null
    endif
    
    set dd = TriggerData.create( )
    set dd.attacked = Runner
    set dd.pl = GetOwningPlayer( Runner )
    set dd.trg = CreateTrigger( )
    set dd.trc = TriggerAddCondition( dd.trg, Condition( function Trig_RunnerDamageDetect_Conditions ) )
    set dd.tra = TriggerAddAction ( dd.trg, function Trig_RunnerDamageLock_Actions )
    set dd.tt = CreateTextTag( )
    set dd.hp = 1000.00 * ChargesCount
    set dd.dmg = 1.00
    set dd.id = 0
    set dd.time = 480
    set dd.c = 0.03125
    
    call UnitAddAbility( Runner, 'A07E' )
    call UnitRemoveAbility( Runner, 'A07E' )
    call UnitAddAbility( Runner, 'A08L' )
    call UnitMakeAbilityPermanent( Runner, true, 'A08L' )
    
    call SetDataBX( dd.trg, dd )
    call SaveInteger( gg_htb_HashData, ExKeySoPRunner, RunnerId, dd )
    
    call TriggerRegisterPlayerEvent( dd.trg, dd.pl, EVENT_PLAYER_LEAVE )
    call TriggerRegisterDeathEvent( dd.trg, Runner )
    call TriggerRegisterUnitEvent( dd.trg, Runner, EVENT_UNIT_DAMAGED )
    
    call TriggerRegisterTimerEvent( dd.trg, 0.03125, true )
    
    if GetLocalPlayer( ) == dd.pl or IsPlayerAlly( GetLocalPlayer( ), dd.pl ) then
        call SetTextTagVisibility( dd.tt, true )
    else
        call SetTextTagVisibility( dd.tt, false )
    endif
    
    set pBuff = GetUnitAbility( dd.attacked, 'B00A' ) + 0x90
    set dd.c = TimerGetElapsed( DispTimer )
    call WMem( RMem( pBuff ) + 0x4, mR2I( dd.c + 15.10 ) )
    call WMem( RMem( pBuff ) + 0x8, mR2I( dd.c + 10.408 ) )
    call SetBuffLevel( pBuff - 0x90, ChargesCount )
    call UpdateAirportTrainingBar( dd.tt, 100, 100 )
    
    set Runner = null
endfunction
    
//===========================================================================
function InitTrig_Staff_of_Purification takes nothing returns nothing
    set udg__TempBarStyle = 0
endfunction
Выше пример баффа для предмета, который образует щит блокирующий урон, кол-во заблокированного урона и сколько еще заблокирует щит отображается над головой героя, в виде полоски здоровья (только цвет сине-красный). Так же в статуе есть бафф, один в 1 как бафф дефектных способностей вара, не складывается - новый, перебивает старый. И так далее...
ответ
~16GB:
function move takes integer i returns nothing
    local unit u = udg_unit[i] // дамми снаряда
    local location p = GetUnitLoc(u)
    local location p2 = udg_point[i] // таргет спелла
    local real a
if DistanceBetweenPoints(p, p2) > 100 then
   set a = AngleBetweenPoints(p, p2)
   call MoveLocation(p, GetLocationX(p) + 10 * CosBJ(a), GetLocationY(p) + 10 * SinBJ(a))
   call SetUnitPositionLoc( u, p )
else
    call KillUnit( u )
    call RemoveLocation(p2)
    set udg_unit[i] = udg_unit[udg_number]
    set udg_point[i] = udg_point[udg_number]
    set udg_i = udg_i-1
    set udg_number = udg_number -1
    call PolledWait(0.5)
    call RemoveUnit(u)
endif
    set u = null
    call RemoveLocation(p)
    set p = null
    set p2 = null
    set a = 0
endfunction
Ты удалял точку сразу

23

» WarCraft 3 / Локальные переменные и таймер

Похожие вопросы:

ответ
юзать глобалки либо перебирать циклом
а вообще научись правильно использовать таймеры и будет тебе счастье
вот статейка с годным примером таймера
вроде у меня в блоге тоже была статья на эту тему
ответ
глобальный массив не нужен. сохраняй группу в хэш-таблицу на хэндл героя, потом загружай ее когда надо. у каждого героя будет своя группа
вот пример, молот бурь съедает юнита а удар грома ставит всех юнитов обратно
ответ
Поиск в помощь, вот ссылка
ответ
у тестаг есть функция жизни вот его и указывай и оно автоматом удаляет тестагом

23

» WarCraft 3 / Декорация пропадает

Похожие вопросы:

ответ
cJass, vJass и Jass2 - разные концы одной палки. Но после освоения структур, которые есть в vJass и освоения синтаксиса cJass ты вполне сможешь быстро освоить любой язык C-семейства.
ответ
Вот, нашёл: xgm.guru/files/100/174291/comments/328619/USTS.w3x
А вот, что можно сделать с помощью этой системы:
ответ
~8gabriel8:
Наверное, имеется ввиду, что при движении камеры в диалогах могут пропадать модели, середину которых камера не захватывает. Мне тоже интересен этот вопрос. Сам пока не разбирался, но есть предположение, что модель может перестать исчезать, если сделать её какой-то разновидностью декораций.

23

» WarCraft 3 / Функция сообщения от игрока

Похожие вопросы:

ответ
а хотя стоп
у players_count нету начального значения
вместо
local integer players_count
local integer half_players
надо
local integer players_count = 0
local integer half_players = 0

23

» WarCraft 3 / Вопросы по Lua

Похожие вопросы:

ответ
но я так и не нашёл в каком чате он это показывал
ответ
В Lua есть таблицы, которые можно использовать как массивы. Читайте документацию Lua.

23

» WarCraft 3 / Скрыть способность юнита

Похожие вопросы:

ответ
триггерно запрещай/разрешай способность
либо добавляй/удаляй
подробнее тут
ответ
Ну у мастера клинка способность то посложнее...
Вот пример:
Для начала нам нужно создать иллюзии героя, а потом скрыть всех их, так же сделав визуальный эффект (если что то зеленые тени, это снаряды).
ответ
Steal nerves:
Filius Dei, у канал есть пунктик "изображение". Если этот пунктик галочкой снять, то изображение иконки не будет отображаться. Но можно отдавать приказы через триггеры.
Можно сделать двухуровневую способность, в одном уровне иконка скрыта, в другом показана (но не пробовал такое)
ответ
Короче, поскольку кроме костылей ни вы, ни я ничего придумать не решили, вот моя реализация:
Герою дается двойной инвиз(не выходит из него при атаках и кастах), для всех игроков создается дамми с трусайтом с минимальным радиусом, с привязкой к владельцу кастера(по номеру игрока), и его двигает таймером за юнитом. Дамми НЕ создается для тех игроков, которые попали под иллюзию. Также им отключается шейрвижен, чтобы союзники НЕ попавшие в иллюзию, не палили кастера своей дамми-трусайтом.
Проще говоря, вместо того, чтобы дать инвиз против отдельных игроков, я дал всем игрокам трусайт, и только зацепленным - нет.
ответ
богопротивные 0,-11 нужно менять на православные buttonpos=-2147483648,-2147483648

23

» WarCraft 3 / Локальный массив Jass

Похожие вопросы:

ответ
массивы или хэш
один фиг
только массивы быстрее
массивы надо знать обязательно
они используются не только в программировании но и в математике и физике
та же хэш таблица построена на основе массива
ответ
всегда по ссылке для handle-типов, всегда по значению для остальных
изменить это невозможно
никак, использовать глобалку, куда сохранять локалку перед нулением
нет, нету
ну или аналоги всего этого есть в продвинутых редакторах, не знаю, пусть те, кто ими пользуются, скажут

23

» WarCraft 3 / Не создаётся предмет

Похожие вопросы:

ответ
UnitRemoveAbility(whichUnit, 'ARal')
где whichUnit - твое здание
ответ
Неуязвимость проверяют через даммика с атакой, через приказ, сможет ли атаковать или нет, просто проверка выполнения приказа. Так же пытаются нанести урон и смотрят сколько он отнял здоровья, так можно и определить неуязвимость и вычислить резист юнита к конкретному типу урона.

23

» WarCraft 3 / Длина массива.

Похожие вопросы:

ответ
Нашёл решение здесь
ответ
максимальная длина массива 8192
ты врёшь
хотя бы потому что нельзя нормально устанавливать длину массива(можно лишь увеличить его размер ещё на 8192,но это только в сиджасс)
короче размер массива фиксирован
ответ
Ige, да о чем вы говорите. ИМХО, самое оптимальное предложение содержится в 3 комментарии.
И еще тут много лишних функций. Да и просто первый признак jass - отсутствие бж за исключением дебага( хоть мои слова кажется трепом и выпендрежем, но без чистого скрипта на нативах.... )
ответ
Это число обозначает, сколько элементов массива заполняется в начале игры значением по умолчанию. Настоящий размер массива всегда 8192.
Т.е. если ты ставишь "Раз. 3" и "Нач. знач. 1", то первые 3 элемента массива будут равны 1, а значение следующих будет неопределенным.

23

» WarCraft 3 / Принципы Jass

Похожие вопросы:

ответ
Вобщем озарение как всегда пришло внезапно - понял что GetSpellAbilityUnit срабатывает на дамми и записывает в массив его, а не цель щита. Просто передвинул махинации с дамми в конец функции Actions. Всё отменно работает. Всем спасибо все свободны
ответ
Naadir, что значит сохраняется но не компилится?
можно скрины кода а также пути к карте, игре и редактору
ответ
Очередной проект задохнулся за недостатком энтузиазма...
Ну почему же сразу "задохнулся"? АоС как жанр в целом может развиваться бесконечно, и любую версию после релизной можно воспринимать как финальную, пока не выйдет следующая.

Автору: вообще-то говоря, подобные вещи обычно публикуют в блогах. В QA (этом разделе) тоже можно, конечно, но вопросы обычно очень быстро пропадают из поля зрения пользователей сайта, а поиск продолжателя может занять значительное время.
Вообще, я бы глянул исходник интереса ради. Продолжать гарантированно не буду, но мб на досуге что-нибудь запилю/перепилю для развлечения и скину тебе. Впрочем, тоже не обещаю.

Остальных комментаторов хотелось бы попросить воздержаться от выкрикивания мнений без конструктива по существу.
ответ

А еще у меня там местами xpcall отладочный висит, там где я ловил косяки и не убрал его потом, без него код чуть проще становится, он нужен только для отлова ошибок и в моем случае вывода их на экран.

Это печально, новые костыли, а я уже обрадовался, что ничего обнулять и чистить не нужно =(
Не нужно обнулять локалки в функциях и все что ограниченного срока жизни, но всякие системы хранения данных они же либо глобальные либо в "локальном" скопе всей карты и, соответственно, живут пока загружена карта - там вручную подчищать надо, естественно. Можно делать это полу-автоматически как у меня, можно вручную когда становится известно что данные уже не нужны. Можно было бы использовать таблицу со слабыми ключами, но тогда возникает вопрос что использовать в качестве ключей - можно прямо на самого юнита вешать, чтобы когда игра его удалит из памяти, таблица почистилась сборщиком мусора, но нет гарантии что это будет работать и не будет вызывать десинки т.к. сборщику мусора синхронизация не указ.
Bergi_Bear:
но мне можно себе такой вариант забрать или надо ещё что-то дополнительно записать?
У меня библиотека отгорожена только ради того чтобы автоматизировать сборку мусора и создание новых таблиц при обращении по хендлу на который ничего нет.
Минимальный вариант, наверно, такой:
local HandleData = {} -- я использую локальные переменные в скопе карты, при этом важен порядок но доступ к ним идет чуть быстрее чем в глобальном скопе

function ForceUnit (u,a,d,s,flag)
  local data = HandleData[GetHandleId(u)]
  if (data==nil) then data = {} HandleData[GetHandleId(u)] = data end
  data.a = a
  data.d = d
  data.s = s
  data.flag = flag
  GroupAddUnit(gforce, u)
end
-- --------------
ForGroup(gforce, function()
  local u=GetEnumUnit()
  local h=GetHandleId(u)
  local data = HandleData[h]
  local a=data.a
  local d=data.d
  local s=data.s
  local flag=data.flag
  ...
end

23

» WarCraft 3 / Два мультиборда в игре

Похожие вопросы:

ответ
Вам сюда, господин хороший. Там есть ответы, практически, на все ваши вопросы.
ответ
Вот как это выглядит
Гхм, слишком сложно сделано.
Заведи себе глобальную переменную целочисленного типа. Назови её "Номер игрока". При срабатывании триггера на смерть делай следующее.
Номер игрока = номер игрока(игрок-владелец(умирающий юнит))
массив[Номер игрока] = массив[Номер игрока] - 1
В настройке переменной твоего массива нужно поставить изначальное значение 3, а размер массива на количество игроков в твоей карте.
появилась до того как я создал вот этот триггер с этой фотки.
Ты тут каждые 0.1 секунды увеличиваешь значение на 3. Зачем?

23

» WarCraft 3 / синтаксис Jass

Похожие вопросы:

ответ
под джасс надо писать самому
можно взять под другие яп
или вообще писать в блокноте(как я это делаю)
и код на скрине плохой
ответ
Переустановить вар, сверху прогу. Если не поможет снести винду.
ответ
Jack-of-shadow, ну конвертеров нету, руками ну или Find + Replace...
ответ
Близрад да так вставили, шоб не ныли, что там нет вжасса. А подсветку синтаксиса они просто забыли, и им побарабану, если есть вжасс и это пока хватит ширпотребу, т.к. рефорж важнее.
Братиш, мой тебе совет - качай HiveWE для патчей 1.30 и выше.

23

» WarCraft 3 / Квесты

Похожие вопросы:

ответ
Maxim105, насчет положения кнопок. Думаю, если задать у всех способностей "Графика - Положение кнопки: ... (X), (Y)", они не должны перемешиваться (Вот тут про координаты есть). Хотя, возможно, проблема в чем-то другом.
Насчет иконок на мини карте. Отрыл в кампании Рексара, что для нейтральных зданий можно указать и включить специальную иконку
ответ
в архиве карты есть файл *.wts
он хранит эти строки (ищи по номеру)
ответ
Убить 5 зомби.
Менее оригинальный:
  1. Принести труп зомби на базу (как понял, она вверху справа) для исследования их уязвимостей. При убийстве зомби тебе дается итэм - его тело, которое понижает скорость перемещения и атаку.
  2. Взять образец воды из токсичной реки.
  3. Охранять базу в течение 5 минут, пока изготавливаются бластеры, эффективные против зомби.
  4. Раздать оружие помощникам и очистить планету от зомби и их лидера (который неуязвим к обычному оружию).
ответ
Карта со всеми видами квестов

23

» WarCraft 3 / Применение способности триггером

Похожие вопросы:

ответ
Всем спасибо! Меня осенило.
ответ
событие - юнит получает урон
условие - юнит получивший урон имеет баф (баф стрелы)
Pippetz, лучше не яд а ледяные стрелы
ответ
Создаешь две переменные - TempPoint (тип - точка), TempUnit (тип - боевая единица)
Событие - Приводит способность в действие
Условие - Применяемая способность = "Твоя способность"
Действия:
TempPoint = позиция применяющего юнита
TempUnit = Создать твоего дамми в TempPoint
Создать таймер смерти для TempUnit на 1.0 секунд
Заставить юнита выполнить приказ (тут уже сам разберешься)
Custom Script'ом вводишь код: call RemoveLocation(udg_TempPoint)
А вообще, если у тебя более-менее серьезный проект, то советую перейти на Джасс, ибо на ГУИ в картах ниже быстродействие из-за дополнительных вызовов через БЖ-функции, а также утечки, которые как ни крути не устранишь полностью. Да и сам Джасс гораздо удобнее и функциональнее
ответ
Вот, должно работать. Если понадобится временное подчинение - таймер поможет.

23

» WarCraft 3 / Воскрешение героя

Похожие вопросы:

ответ
вроде был такой вопрос
косяк в мгновенном воскрешении, стоит добавить небольшую задержку вроде как
ответ
Steal nerves:
Ельнур, слишком много триггеров и кода. при чем чужих триггеров и кода. и надо разбираться. что-то лень. можно попробовать вот что сделать:
  1. узнать когда удаляется у тебя герой. Во время смерти? ищи тогда все триггеры с событием "юнит умирает". смотри там где есть RemoveUnit.
  2. во-вторых, всегда надо ставить фильтры, условия. Что допустим не равно "герой".
  3. мне кажется, что несколько триггеров видел. например рассеган
ответ
Всё просто, только зачем такие сложности?
ответ
Cardinal, за такое именование переменных нужно по рукам бить.
то бежит к третьему триггеру которій и воскрешает
Не плодите триггеров, все нужные действия можно и в цикле сделать.
У вас переменная T отвечает за состояние героя, зачем проверять жив юнит или нет?
T<0 Жив
T==0 Нужно воскресить прям сейчас
T>0 Ждёт воскрешения
Cardinal:
T[номер героя] болше или равна 1
больше или равна 0 => T[] = T[] -1

23

» WarCraft 3 / Диалоговые кнопки

Похожие вопросы:

ответ
Второй комп сломан поэтому проверить не могу, почему у меня подозрение, что оно должно работать....
Хотя могу и ошибаться, нормально делал карты года 2 назад.
ответ
molot39:
KingMaximax:
О ужас, конечно не будет работать ты все не правильно сделал.. Сейчас скину скриншоты, как правильно надо. К тому же не зарегистрировал диалог в событие по его нажатию.
Добавлено [16:14]:
Esc оказался зарезервированным, и не работал на кнопку жаль. А метод Пуловера не рабочий... Проверил просто на всякий случай... И вот клавишу на Q сделал, ибо ближе к Esc и к тому же значит Quit - выйти.
На скринах триггеры выключаются и включаются, не увидел функцию на включения второго триггера. А в нем можно поставить те же условия и действия, так как первый отключен, должен работать "Esc" для выхода из окна.
Нет, он есть во втором тригге trigg2 в самом низу -Turn on trigg1 и смотри тригг1!
Все зависит от того, как ты используешь диалог... Но лучше вешать несколько диалогов на триггер)))000
Однако нужно будет применять GetClickedDialog() для получения диалога, который был нажат.
SсRealm:
У меня есть карта,где на esc работает и появление окна и убрирание((
Короче не смог((
Я тебе дал картинки пример. Хотя вот глянь в своей карте, которую я изменил.
ответ
Это баг варика. Когда ты используешь несколько диалогов и показываешь их подряд, название Title надо каждый раз заново создавать. Если бы у тебя был один диалог и ты бы его показывал несколько раз подряд - заголовок сохраниться.
Могу посоветовать при пересоздании запускать триггер dialog повторно.
ответ
XGM Bot:
Похожие вопросы:

ответ
Установить интеджер = рандомное число от 1 до N
если 1 = дать боту наг
если 2 = дать боту альянсов
если 3 = дать боту эльфов
и т.д.
ответ
molot39:
KingMaximax:
О ужас, конечно не будет работать ты все не правильно сделал.. Сейчас скину скриншоты, как правильно надо. К тому же не зарегистрировал диалог в событие по его нажатию.
Добавлено [16:14]:
Esc оказался зарезервированным, и не работал на кнопку жаль. А метод Пуловера не рабочий... Проверил просто на всякий случай... И вот клавишу на Q сделал, ибо ближе к Esc и к тому же значит Quit - выйти.
На скринах триггеры выключаются и включаются, не увидел функцию на включения второго триггера. А в нем можно поставить те же условия и действия, так как первый отключен, должен работать "Esc" для выхода из окна.
Нет, он есть во втором тригге trigg2 в самом низу -Turn on trigg1 и смотри тригг1!
Все зависит от того, как ты используешь диалог... Но лучше вешать несколько диалогов на триггер)))000
Однако нужно будет применять GetClickedDialog() для получения диалога, который был нажат.
SсRealm:
У меня есть карта,где на esc работает и появление окна и убрирание((
Короче не смог((
Я тебе дал картинки пример. Хотя вот глянь в своей карте, которую я изменил.
ответ
Ну как бы диологовые окна работают как как их сделали, раз вы сделали диалок для одного игрока то его и видит 1 игрок.
Диалоговое окно нужно показывать всем играющим игрокам, и создавать триггер (на гуях проще 1 кнопка=1 триггер который следит за кнопной) и по нажатию кнопки смотреть какой игрок нажал на кнопку и создавать для него необходимого персонажа.
ответ
Это баг варика. Когда ты используешь несколько диалогов и показываешь их подряд, название Title надо каждый раз заново создавать. Если бы у тебя был один диалог и ты бы его показывал несколько раз подряд - заголовок сохраниться.
Могу посоветовать при пересоздании запускать триггер dialog повторно.
ответ
Читайте статьи, пожалуйста.

ответ
В версиях, где работает стэк кнопок (х=0 у=-11), можешь скрыть кнопку патруля, а вместо неё шлепнуть кнопку-пустышку и делать триггер на неё. Кнопка патруля работать будет, но самой кнопки видно не будет.

23

» WarCraft 3 / Нужна наработка

Похожие вопросы:

ответ
Вот твоя наработка xgm.guru/p/wc3/3962
ответ
Про циклы знаем? Выбрать все разрушаемые и возродить выбранные - если все сразу.
Если мгновенно возродить умирающее дерево - то в 1 триггере надо циклом добавить события "выбранное разрушаемое умирает" в 2 триггер. А во в 2 воскрешать "умирающее разрушаемое"
ответ
Уровень предмета - класс.
ответ
вопрос закрыт. Помогли
ответ
Всё. Сам разобрался.

23

» WarCraft 3 / Вес карт

Похожие вопросы:

ответ
Devill, там не расы там всякие скаченные модели
слова про разнообразие рас это просто отговорки для того чтобы понапихать всякого хлама
размер карты(сюда входит размер всех используемых моделей и текстур из архивов) влияет на количество требуемой оперативки для игры
а учитывая что там могут быть утечки то я бы не стал столько пихать
ответ
В конце ноября 2016 года Blizzard выпустили патч, позволяющий играть по сети в карты до 128 Мб.
ответ
Добавить модели в карту, расставить декорации в редакторе, удалить импортированные модели из карты перед самым релизом карты.
Profit.
ответ
Roy Mustang:
128 mb
ответ
MPQ Master'ом открывается
там и искать нужную модель и удалять

23

» WarCraft 3 / Смена модели

Похожие вопросы:

ответ
  1. Чтобы иметь и модель с обычной текстурой и с другой, с помощью программы для извлечения моделей из Warcraft 3 (я пользуюсь обычно Warcraft 3 Viewer, поищи на сайте), там ищешь справа в папках твою модель, извлекаешь её к себе на компьютер.
  1. Потом открываешь программой mdlvis (основная программа для моделлинга, тоже здесь есть) модель, сразу выделяешь её и нажимаешь кнопку UV-карты или модули - редактор текстур.
  1. Внизу есть путь для текстуры, измени на название скачанной. Нажми enter, сохрани модель.
  1. Если текстура специально для той модели, переходи к следующему пункту.
  1. Кинь текстуру и модель в папку с вариком и открывай WE. У тебя стандартная модель и модель с другой текстурой.

Возможно, звучит сложно, но я привык, несколько кликов - и текстура изменена.
ответ
Если смена модели должна пройти без потери функциональности юнита - морфом или способностью "тёмный".
ответ
MrSlendyBoy, а, в архиве поменять надо, значит.
Я архивы не менял никогда, но предлагаю так: в архив нужно закинуть твою модель (с точно таким же путём, как у той, которую нужно заменить) и её текстуру (прямо в корень архива).
ответ
~8gabriel8:
Смотри карту: xgm.guru/files/100/219921/comments/408338/0.w3x
Там для героев созданы их копии с другой моделью и нестандартные способности на основе способности Тёмный, которая заменяет юнита на указанного другого. Такой вариант не меняет имя героя, порядок предметов в инвентаре, кулдаун на предметах и способностях, но что-то упоминали ранее о возможных глюках с наложенными заклинаниями. Триггерно при использовании способности не на иллюзии героя добавляем ему нестандартную способность нужного типа.
Вариант с заменой юнита, примерно как ты описал, приведёт к сбросу имени, опыта, способностей, кулдаунов, предметов и заклинаний.
Вариантом морфа героя через руны не умею пользоваться.
Вариант с заменой текстуры персонажа через способность Вырвать дерево требует замены текстур деревьев в карте, а это плохо, так как героев много. Ещё это подразумевает умение работать с 3D-редакторами, которого, как предполагаю, у тебя нет.

23

» WarCraft 3 / Условие со смертью

Похожие вопросы:

ответ
На сотом уровне сделай чтобы можно было выучить скилл на основе морфа сфинкса 'Aave' у силла настрой альтернативные и нормальные формы Юнита, флаг требуется оплата убери.
Когда Юнит выучит способность триггерно приказывай применить ее.
ответ
Если юнит под баффом "чума" - добавить в отряд Чума
Иначе - удалить из отряда Чума
Триггер
С. Таймер Чума
Отряд выбрать юнитов Чума
Если юнит умер
Д. создать юнита в позиции выбранного юнита.
ответ
Группы юнитов + хэш или структуры. При касте спелла берешь кастера, берешь его ID, проверяешь не записана ли группа в какой-либо из ячеек. Если нет - создаешь группу и записываешь её в ячейку. При смерти юнита делаешь проверку не записана ли по его ID группа юнитов - если записана - удаляешь его и проверяешь количество юнитов в группе и если оно равно 0 - удаляешь группу. Естественно хэш тоже чистишь всюду где нужно.

Это звучит как "Сделайте мне пожалуйста систему формаций". Чтобы научить тебя как это сделать придётся потратить несколько десятков часов. И тут 2 варианта: либо ты будешь читать статьи и выучишь всё сам, либо обращайся к отдельным пользователям и проси о приватных, платных, уроках в частном порядке.
Вопрос вообще ни о чём. То, о чём ты спрашиваешь делается за 20-30 минут + несколько часов на всякие плюшки и дебаг (в худшем случае).
Конкретно тебе стоит почитать о Локальных переменных, Хэше или Структурах.
ответ
Юнитов поднимает тогда же, когда и опускает, потому что я удаляю их из DedG[3], но забываю удалить из группы снарядов, таким образом, к тем кто попал под падение, уже навечно задействован акт снарядов(опускание), пока они в DedG[3]

23

» Администрация XGM / Перенос слов

Похожие вопросы:

ответ
Ближе к лету форум будет переведён в режим рид-онли (Только для чтения). Соответственно, никто не сможет писать там, но все смогут читать архивные темы, разделы и посты.
ScorpioT1000:
Дело в том, что форум морально устарел. Обновление его невозможно, т.к. он изнутри не вбуллетин. Мы решили переписать всё на сайт. А как переносить материалы - предлагать можете и вы в том числе, для этого есть проект: xgm.ru/p/xgm-design